/**
 * # 数据实体类:
 *  Date - 日期
 * 
 * # 描述:
 *  表示一个已经安排的工作日或节假日。没有安排的日期将按照默认的规则计算，默认规则如下：周一到周五的为工作日，周六和周日的日期为节假日。
 *  
 * Copyright (c), 上海沃恩信息科技有限公司.
 * All rights reserved.
 * Licensed under BSD (https://www.pittypat.work/bsd.html).
 */

package com.waln.calendar.everyone.data;

/**
 * 日期。
 * 
 * 表示一个已经安排的工作日或节假日。没有安排的日期将按照默认的规则计算，默认规则如下：周一到周五的为工作日，周六和周日的日期为节假日。
 */
public final class Date extends pittypat.DataModel {
	/**
	 * 日期值。
	 * <p>
	 * 目标日期的值。
	 */
	public java.time.LocalDate value;

	/**
	 * 是否工作日。
	 * <p>
	 * 指示目标日期是否是一个工作日：true-是工作日，false-是节假日。
	 */
	public Boolean isWorkday;

	/**
	 * 节日名称。
	 * <p>
	 * 日期对应的节日的名称。
	 */
	public String festivals;

	/**
	 * 初始化 Date 类的一个新实例。
	 */
	public Date() {
		super();

		// 日期值
		this.value = null;
		// 是否工作日
		this.isWorkday = null;
		// 节日名称
		this.festivals = null;
	}

	/**
	 * 从一个 DbDataReader 中读取此对象。
	 * 
	 * @param reader
	 * 			包含对象数据的 DbDataReader 对象。
	 * 
	 * @throws IllegalArgumentException
	 * 
	 * @see pittypat.DataModel#read(pittypat.data.DbDataReader)
	 * @see pittypat.data.DbDataReader
	 */
	@Override
	public void read(pittypat.data.DbDataReader reader) throws IllegalArgumentException {
		if (reader == null) {
			throw new IllegalArgumentException("reader 为 null。");
		}

		// 日期值
		this.value = reader.getDate("value", this.value);
		// 是否工作日
		this.isWorkday = reader.getBoolean("isWorkday", this.isWorkday);
		// 节日名称
		this.festivals = reader.getString("festivals", this.festivals);
	}

	/**
	 * 将当前对象作为 JSON 字符串写入指定的文本流。
	 * 
	 * @param writer
	 * 			目标文本流。
	 * 
	 * @throws IllegalArgumentException
	 * @throws java.io.IOException
	 * 
	 * @see pittypat.DataModel#write(java.io.Writer)
	 */
	@Override
	public void write(java.io.Writer writer) throws IllegalArgumentException, java.io.IOException {
		if (writer == null) {
			throw new IllegalArgumentException("writer 为 null。");
		}

		writer.write('{');

		// 日期值
		writer.write("\"value\":");
		pittypat.Json.write(writer, this.value);
		writer.write(',');

		// 是否工作日
		writer.write("\"isWorkday\":");
		pittypat.Json.write(writer, this.isWorkday);
		writer.write(',');

		// 节日名称
		writer.write("\"festivals\":");
		pittypat.Json.write(writer, this.festivals);

		writer.write('}');
	}
}
